﻿/***********************************************************************************************
COPYRIGHT 2008 Vijeth D

This file is part of Handwritten Character Recognition - NeuronDotNet Sample.
(Project Website : http://neurondotnet.freehostia.com)

NeuronDotNet is a free software. You can redistribute it and/or modify it under the terms of
the GNU General Public License as published by the Free Software Foundation, either version 3
of the License, or (at your option) any later version.

NeuronDotNet is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with NeuronDotNet.
If not, see <http://www.gnu.org/licenses/>.

***********************************************************************************************/

using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;

namespace NeuronDotNet.Controls
{
    public class LetterBox : BufferedPanel
    {
        protected Letter letter;
        protected float drawWidth;

        protected bool colorStrokes;

        public virtual bool ColorStrokes
        {
            get { return colorStrokes; }
            set { colorStrokes = value; }
        }

        public float DrawWidth
        {
            get { return drawWidth; }
            set { drawWidth = value; }
        }

        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
        [Browsable(false)]
        public Letter Letter
        {
            get
            {
                Letter clone = new Letter(letter);
                clone.Clip(new Rectangle(0, 0, this.Width - 1, this.Height - 1));
                return clone;
            }
            set { letter = new Letter(value); }
        }

        public LetterBox()
            : base()
        {
            letter = new Letter();
            drawWidth = 3f;

            this.Paint += new PaintEventHandler(delegate(object sender, PaintEventArgs e)
            {
                Graphics graphics = e.Graphics;
                graphics.Clear(BackColor);
                using (Pen drawingPen = new Pen(ForeColor, drawWidth))
                {
                    foreach (Stroke stroke in letter.Strokes)
                    {
                        if (colorStrokes)
                        {
                            drawingPen.Color = Helper.RandomDarkColor();
                        }
                        graphics.DrawEllipse(drawingPen, stroke.StartingPoint.X, stroke.StartingPoint.Y, 1, 1);
                        foreach (Line line in stroke.Lines)
                        {
                            graphics.DrawLine(drawingPen, line.Start, line.End);
                        }
                        graphics.DrawEllipse(drawingPen, stroke.EndingPoint.X, stroke.EndingPoint.Y, 1, 1);
                    }
                }
            });
        }
    }
}
